# 应收账款统计表打包脚本
import subprocess
import sys
import os

def install_pyinstaller():
    """安装PyInstaller"""
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
        print("PyInstaller 安装成功！")
    except subprocess.CalledProcessError:
        print("PyInstaller 安装失败！")
        return False
    return True

def build_exe():
    """构建可执行文件"""
    try:
        # 使用PyInstaller打包
        cmd = [
            "pyinstaller",
            "--onefile",  # 打包成单个文件
            "--windowed",  # 不显示控制台窗口
            "--name=应收账款统计表_优化界面",  # 设置可执行文件名
            "--icon=",  # 如果有图标文件可以指定
            "--add-data=order_data.json;.",  # 包含数据文件（如果存在）
            "--hidden-import=tkinter",
            "--hidden-import=tkinter.ttk",
            "--hidden-import=tkinter.messagebox",
            "--hidden-import=tkcalendar",
            "--hidden-import=pandas",
            "--hidden-import=openpyxl",
            "--hidden-import=openpyxl.workbook",
            "--hidden-import=openpyxl.styles",
            "--hidden-import=openpyxl.utils",
            "--hidden-import=threading",
            "--hidden-import=time",
            "--exclude-module=matplotlib",
            "--exclude-module=scipy",
            "--exclude-module=IPython",
            "--exclude-module=jupyter",
            "应收账款统计表_优化界面.py"
        ]
        
        # 如果数据文件不存在，则移除该参数
        if not os.path.exists("order_data.json"):
            cmd = [arg for arg in cmd if not arg.startswith("--add-data")]
        
        print("开始打包...")
        print(f"执行命令：{' '.join(cmd)}")
        
        subprocess.check_call(cmd)
        print("打包成功！")
        print("可执行文件位于 dist 文件夹中")
        
    except subprocess.CalledProcessError as e:
        print(f"打包失败：{e}")
        return False
    except Exception as e:
        print(f"打包过程中出现错误：{e}")
        return False
    
    return True

def main():
    print("应收账款统计表 - 打包工具")
    print("=" * 40)
    
    # 检查是否安装了PyInstaller
    try:
        import pyinstaller
        print("PyInstaller 已安装")
    except ImportError:
        print("PyInstaller 未安装，正在安装...")
        if not install_pyinstaller():
            print("无法安装PyInstaller，请手动安装：pip install pyinstaller")
            return
    
    # 检查源文件是否存在
    if not os.path.exists("应收账款统计表_优化界面.py"):
        print("错误：找不到 应收账款统计表_优化界面.py 文件")
        return
    
    # 开始打包
    if build_exe():
        print("\n打包完成！")
        print("使用说明：")
        print("1. 在 dist 文件夹中找到 应收账款统计表_优化界面.exe")
        print("2. 双击运行即可，无需安装Python环境")
        print("3. 数据文件 order_data.json 会在程序运行目录自动创建")
    else:
        print("\n打包失败，请检查错误信息")

if __name__ == "__main__":
    main()
